package cn.tedu.collections;

import java.util.Collections;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * Date：2021年11月
 * Author：程Sir
 * Name： JavaSE-API
 * Content:
 *      HashMap(类)： 是非线程安全的，可以存储为null的键值对，也可以存储key为null的实体
 *      HashTable(类) 是线程安全的，不可以将key和value存储为 null，效率较低，因为多个线程又先后顺序
 *      synchronizedMap(方法): 将map集合转换为线程安全的映射 ，线程安全的映射是可以存放key=null，value=null的值
 *      concurrentHashMap(类): 是线程安全的，不可以将key和value存储为 null，但是因为线程在不同分段是不需要进度等待，所以效率极高
 *
 */
public class MapSyncronizedDemo {
    public static void main(String[] args) {
        // 创建非线程安全的集合：HashMap
        HashMap hashMap = new HashMap();
        // 放入数据
        hashMap.put(1,"NBA");
        // 存入key = null
        hashMap.put(null,"CBA1");
        hashMap.put(null,"CBA2");
        hashMap.put(null,"CBA3");
        // 存入value = null
        hashMap.put(3,null);
        // 存入key=null ， value=null
        hashMap.put(null,null);
        hashMap.put(null,null);
        hashMap.put(null,null);

        System.out.println(hashMap.size());
        System.out.println(hashMap);
        System.out.println("===============");

        // 创建线程安全集合：HashTable
        Map hashtable = new Hashtable();
        // 存入数据
        hashtable.put(1,"zhansan");
//        hashtable.put(2,null);
//        hashtable.put(null,"王五");
//        hashtable.put(null,null);
        System.out.println(hashtable.size());
        System.out.println(hashtable);
        System.out.println("===============");

        Map map = Collections.synchronizedMap(hashMap);
        map.put(null,1);
        map.put(1,null);
        map.put(2,2);
        System.out.println("map的长度："+map.size());
        System.out.println(map);
        System.out.println("===============");



        Map concurrentHashMap = new ConcurrentHashMap();
        concurrentHashMap.put(1,123);
//        concurrentHashMap.put(null,123);
//        concurrentHashMap.put(3,null);
        System.out.println(concurrentHashMap.size());
        System.out.println(concurrentHashMap);
        System.out.println("===============");





    }

}
